
#import <Foundation/Foundation.h>
#import "FSBleConstants.h"
@class BleManager;

/*  蓝牙扫描逻辑
 1. 蓝牙状态发送改变  必须实现
 2. 将要扫描外设     添加UUID的过滤规则
 3. 将要发现设备     通过返回NO 来拒绝加入容器数组
 4. 已经发现设       设备已经加入到同期数组中
 */


@protocol FSCentralScanDelegate <NSObject>

@required
/// 系统蓝牙开关发生改变
/// @param manager 蓝牙中心管理器
/// @param state 当前系统蓝牙的状态
- (void)manager:(BleManager *)manager didUpdateState:(BleManagerState)state;

@optional

/// 将要扫描 通过此方法可以定制需要的uuid 处于对性能的考虑，建议实现这个代理方法，只扫描自己需要的外设
/// @param manager 管理器
/// @param services 需要过去的uuid
- (void)manager:(BleManager *)manager willScanWithServices:(NSMutableArray <CBUUID *> *)services;

/// 将要发现新设备 代理可以通过返回NO来拒绝添加当前设备
/// @param manager 蓝牙管理器
/// @param device 外设
- (BOOL)manager:(BleManager *)manager willDiscoverDevice:(BleDevice *)device;

/// 已经发现新设备 外设已加管理器中的devices 中
/// @param manager 蓝牙管理器
/// @param device 外设
- (void)manager:(BleManager *)manager didDiscoverDevice:(BleDevice *)device;

/*
 5月24日
 解析设备，这个不需要，可以在将要发现设备的时候做设备解析，不需要的外设直接返回NO
 */
- (void)manager:(BleManager *)manager needAnalyzeDevice:(BleDevice *)device;

/*
 5月24日
 将要移除设备  这个方法是否需要还有待考究
 */
- (BOOL)manager:(BleManager *)manager willRemoveDevice:(BleDevice *)device;

/*
5月24日
设备已经移除  这个方法是否需要还有待考究
*/
- (void)managet:(BleManager *)manager didRemoveDevice:(BleDevice *)device;

/*
5月24日
最近设备已更新  这个方法是否需要还有待考究
*/
- (void)manager:(BleManager *)manager didNearestDevice:(BleDevice *)device;

@end

/*  蓝牙连接逻辑
1. 外设调用连接
2. 询问代理最大连接次数
3. 询问代理单次最长连接时间
4. 发起连接
5. 单次最长连接时间后去 询问代理是否连接成功
6. 没有连接成功，发起重连
7. 重连大于最大连接次数，就连接超时
*/
@protocol FSCentralConnectDelegate <NSObject>

// 必须实现的方法  蓝牙开关的状态发送改变
@required

// 选择实现的方法
@optional

/// 单次连接时间
- (NSInteger)singleConnectTimeInterval;

/// 最大连接次数
- (int)maxNumberOfConnentCounts;

/// 连接失败，连接过程中发生错误
/// @param error 错误
/// @param timeout 是否连接超时，大于最大连接次数就表示连接超时
- (void)deviceConnectFailed:(NSError *)error isTimeout:(BOOL)timeout;

/// 设备连接完成，若无错误则连接成功
/// @param device 连接的设备
- (void)deviceDidConnected:(BleDevice *)device;

/// 设备已断开连接  初次连接超时也会走这个回调方法
/// @param device 连接的设备
/// @param mode 断开类型
- (void)device:(BleDevice *)device didDisconnectedWithMode:(BleDisconnectMode)mode;

@end

// 外设的代理  发现服务/特征 绑定通知通道、写入数据等方法
@protocol FSPeripheralDelegate <NSObject>

// 必须实现的方法  蓝牙开关的状态发送改变
@required

// 选择实现的方法
@optional

@end

